# Install packages if needed
package_list <- c("tidyverse", "stringr", "foreign", "ggmap", "tigris", "raster", "maptools", "viridis", "rmarkdown", "knitr")
new_packages <- package_list[! package_list %in% installed.packages()[,"Package"]]
if(length(new_packages)) install.packages(new_packages)
library(stringr) # for string manipulation
# library(janitor) # for handy tools to inspect/clean data
library(foreign) # For reading in different file formats (incl DBF)
library(ggmap) # for additional ggplot2 themes (eg. theme_map)
library(tigris) # for downloading census shapefiles
# library(rgeos) # for handling spatial data
library(raster) # for erase function to clip tracts to shoreline (erase water)
library(maptools) # for manipulating spatial data
library(viridis) # for color palettes
library(tidyverse) # for tidy data manipulation
dart_raw <- read.dbf("../dropbox/capstone/data/raw/t_103113_1.dbf", as.is = TRUE)
names(dart_raw) <- names(dart_raw) %>% str_to_lower()
xwalk <-
read_csv("../dropbox/capstone/data/crosswalks/gent_xwalk.csv", col_types = cols(geoid = "c")) %>%
mutate(gent = recode(gent_ind, `0` = NA_character_, `1` = "Gentrifying",
`2` = "Non-Gentrifying", `3` = "Higher-Income"),
gent = ordered(gent, levels = c("Gentrifying", "Non-Gentrifying", "Higher-Income"))) %>%
select(geoid, gent) %>%
filter(!is.na(gent))
dart_nyc <-
dart_raw %>%
as_data_frame() %>%
filter(county %in% c("36005", "36047", "36061", "36081", "36085")) %>%
transmute(geoid = str_c(county, tract),
boro = recode(county, "36005" = "Bronx", "36047" = "Brooklyn", "36061" = "Manhattan",
"36081" = "Queens", "36085" = "Staten Island"),
medicare_denom = tbene_n10,
medicare_acscd = tacs_10) %>%
mutate_if(is.double, funs(if_else(. %in% c(-99, -999), NA_real_, .))) %>%
mutate(acscd_rt = if_else(medicare_denom != 0, (medicare_acscd / medicare_denom)*1000, NA_real_)) %>%
inner_join(xwalk, by = "geoid")
head(dart_nyc)
dart_nyc %>%
filter(!is.na(acscd_rt)) %>%
group_by(gent) %>%
summarise(acscd_rt = sum(medicare_acscd) / sum(medicare_denom) * 1000) %>%
ggplot(aes(gent, acscd_rt, fill = gent)) +
geom_col() +
geom_text(aes(y = acscd_rt + 5, label = round(acscd_rt, 1))) +
scale_fill_viridis(discrete = TRUE) +
labs(title = "Ambulatory Care Sensitive Condition Discharges",
subtitle = "per 1000 Medicare Benificiaries",
x = "", y = "", fill = "")


boros <- c("005", "047", "0061", "081", "085")
Warning message:
In scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
EOF within quoted string
p <-
tracts_df %>%
ggplot(aes(x= long, y = lat, group = group, fill = acscd_rt)) +
geom_polygon() +
geom_polygon(fill = NA, color = "white", size = 0.10) +
coord_map() +
scale_fill_viridis(option = "magma") +
theme_nothing(legend = TRUE) +
labs(title = "Ambulatory Care Sensitive Condition Discharges \nper 1,000 Medicare Beneficiaries",
subtitle = "New York City, 2010",
fil = "",
caption = "Source: Dartmouth Atlas of Health Care") +
theme(legend.title = element_blank(),
legend.position = c(.1, .7),
plot.caption = element_text(colour = "grey50"))
ggsave("acsc_map.png", p, width = 10, height = 10, units = "in")
p <-
tracts_df %>%
ggplot(aes(x= long, y = lat, group = group, fill = gent)) +
geom_polygon() +
geom_polygon(fill = NA, color = "white", size = 0.10) +
coord_map() +
scale_fill_viridis(discrete = TRUE) +
theme_nothing(legend = TRUE) +
labs(title = "Gentrification Status by Tract",
subtitle = "New York City, 2010",
fil = "",
caption = "Source: Dartmouth Atlas of Health Care") +
theme(legend.title = element_blank(),
legend.position = c(.1, .7),
plot.caption = element_text(colour = "grey50"))
ggsave("gent_map.png", p, width = 10, height = 10, units = "in")
LS0tCnRpdGxlOiAiRXhwbG9yZSBEYXJ0bW91dGggRGF0YSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBnaXRodWJfZG9jdW1lbnQ6IGRlZmF1bHQKZGF0ZTogJ2ByIFN5cy5EYXRlKClgJwotLS0KCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQojIEluc3RhbGwgcGFja2FnZXMgaWYgbmVlZGVkCnBhY2thZ2VfbGlzdCA8LSBjKCJ0aWR5dmVyc2UiLCAic3RyaW5nciIsICJmb3JlaWduIiwgImdnbWFwIiwgInRpZ3JpcyIsICJyYXN0ZXIiLCAibWFwdG9vbHMiLCAidmlyaWRpcyIsICJybWFya2Rvd24iLCAia25pdHIiKQpuZXdfcGFja2FnZXMgPC0gcGFja2FnZV9saXN0WyEgcGFja2FnZV9saXN0ICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCJQYWNrYWdlIl1dCmlmKGxlbmd0aChuZXdfcGFja2FnZXMpKSBpbnN0YWxsLnBhY2thZ2VzKG5ld19wYWNrYWdlcykKCmxpYnJhcnkoc3RyaW5ncikgIyBmb3Igc3RyaW5nIG1hbmlwdWxhdGlvbgojIGxpYnJhcnkoamFuaXRvcikgIyBmb3IgaGFuZHkgdG9vbHMgdG8gaW5zcGVjdC9jbGVhbiBkYXRhCmxpYnJhcnkoZm9yZWlnbikgIyBGb3IgcmVhZGluZyBpbiBkaWZmZXJlbnQgZmlsZSBmb3JtYXRzIChpbmNsIERCRikKbGlicmFyeShnZ21hcCkgIyBmb3IgYWRkaXRpb25hbCBnZ3Bsb3QyIHRoZW1lcyAoZWcuIHRoZW1lX21hcCkKbGlicmFyeSh0aWdyaXMpICMgZm9yIGRvd25sb2FkaW5nIGNlbnN1cyBzaGFwZWZpbGVzCiMgbGlicmFyeShyZ2VvcykgIyBmb3IgaGFuZGxpbmcgc3BhdGlhbCBkYXRhCmxpYnJhcnkocmFzdGVyKSAjIGZvciBlcmFzZSBmdW5jdGlvbiB0byBjbGlwIHRyYWN0cyB0byBzaG9yZWxpbmUgKGVyYXNlIHdhdGVyKQpsaWJyYXJ5KG1hcHRvb2xzKSAjIGZvciBtYW5pcHVsYXRpbmcgc3BhdGlhbCBkYXRhCmxpYnJhcnkodmlyaWRpcykgIyBmb3IgY29sb3IgcGFsZXR0ZXMKbGlicmFyeSh0aWR5dmVyc2UpICMgZm9yIHRpZHkgZGF0YSBtYW5pcHVsYXRpb24KYGBgCgpgYGB7cn0KZGFydF9yYXcgPC0gcmVhZC5kYmYoIi4uL2Ryb3Bib3gvY2Fwc3RvbmUvZGF0YS9yYXcvdF8xMDMxMTNfMS5kYmYiLCBhcy5pcyA9IFRSVUUpCm5hbWVzKGRhcnRfcmF3KSA8LSBuYW1lcyhkYXJ0X3JhdykgJT4lIHN0cl90b19sb3dlcigpCgp4d2FsayA8LSAKICByZWFkX2NzdigiLi4vZHJvcGJveC9jYXBzdG9uZS9kYXRhL2Nyb3Nzd2Fsa3MvZ2VudF94d2Fsay5jc3YiLCBjb2xfdHlwZXMgPSBjb2xzKGdlb2lkID0gImMiKSkgJT4lIAogIG11dGF0ZShnZW50ID0gcmVjb2RlKGdlbnRfaW5kLCBgMGAgPSBOQV9jaGFyYWN0ZXJfLCBgMWAgPSAiR2VudHJpZnlpbmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDJgID0gIk5vbi1HZW50cmlmeWluZyIsIGAzYCA9ICJIaWdoZXItSW5jb21lIiksCiAgICAgICAgIGdlbnQgPSBvcmRlcmVkKGdlbnQsIGxldmVscyA9IGMoIkdlbnRyaWZ5aW5nIiwgIk5vbi1HZW50cmlmeWluZyIsICJIaWdoZXItSW5jb21lIikpKSAlPiUgCiAgc2VsZWN0KGdlb2lkLCBnZW50KSAlPiUgCiAgZmlsdGVyKCFpcy5uYShnZW50KSkKYGBgCgpgYGB7cn0KZGFydF9ueWMgPC0gCiAgZGFydF9yYXcgJT4lIAogIGFzX2RhdGFfZnJhbWUoKSAlPiUgCiAgZmlsdGVyKGNvdW50eSAlaW4lIGMoIjM2MDA1IiwgIjM2MDQ3IiwgIjM2MDYxIiwgIjM2MDgxIiwgIjM2MDg1IikpICU+JSAKICB0cmFuc211dGUoZ2VvaWQgPSBzdHJfYyhjb3VudHksIHRyYWN0KSwKICAgICAgICAgICAgYm9ybyA9IHJlY29kZShjb3VudHksICIzNjAwNSIgPSAiQnJvbngiLCAiMzYwNDciID0gIkJyb29rbHluIiwgIjM2MDYxIiA9ICJNYW5oYXR0YW4iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzNjA4MSIgPSAiUXVlZW5zIiwgIjM2MDg1IiA9ICJTdGF0ZW4gSXNsYW5kIiksCiAgICAgICAgICAgIG1lZGljYXJlX2Rlbm9tID0gdGJlbmVfbjEwLAogICAgICAgICAgICBtZWRpY2FyZV9hY3NjZCA9IHRhY3NfMTApICU+JSAKICBtdXRhdGVfaWYoaXMuZG91YmxlLCBmdW5zKGlmX2Vsc2UoLiAlaW4lIGMoLTk5LCAtOTk5KSwgTkFfcmVhbF8sIC4pKSkgJT4lIAogIG11dGF0ZShhY3NjZF9ydCA9IGlmX2Vsc2UobWVkaWNhcmVfZGVub20gIT0gMCwgKG1lZGljYXJlX2Fjc2NkIC8gbWVkaWNhcmVfZGVub20pKjEwMDAsIE5BX3JlYWxfKSkgJT4lIAogIGlubmVyX2pvaW4oeHdhbGssIGJ5ID0gImdlb2lkIikKCmhlYWQoZGFydF9ueWMpCmBgYAoKYGBge3J9CmRhcnRfbnljICU+JSAKICBmaWx0ZXIoIWlzLm5hKGFjc2NkX3J0KSkgJT4lCiAgZ3JvdXBfYnkoZ2VudCkgJT4lIAogIHN1bW1hcmlzZShhY3NjZF9ydCA9IHN1bShtZWRpY2FyZV9hY3NjZCkgLyBzdW0obWVkaWNhcmVfZGVub20pICogMTAwMCkgJT4lIAogIGdncGxvdChhZXMoZ2VudCwgYWNzY2RfcnQsIGZpbGwgPSBnZW50KSkgKwogIGdlb21fY29sKCkgKwogIGdlb21fdGV4dChhZXMoeSA9IGFjc2NkX3J0ICsgNSwgbGFiZWwgPSByb3VuZChhY3NjZF9ydCwgMSkpKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzKGRpc2NyZXRlID0gVFJVRSkgKwogIGxhYnModGl0bGUgPSAiQW1idWxhdG9yeSBDYXJlIFNlbnNpdGl2ZSBDb25kaXRpb24gRGlzY2hhcmdlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJwZXIgMTAwMCBNZWRpY2FyZSBCZW5pZmljaWFyaWVzIiwKICAgICAgIHggPSAiIiwgeSA9ICIiLCBmaWxsID0gIiIpCmBgYAoKYGBge3J9CmRhcnRfbnljICU+JSAKICBmaWx0ZXIoIWlzLm5hKGFjc2NkX3J0KSkgJT4lIAogIGdncGxvdChhZXMoeCA9IGFjc2NkX3J0KSkgKwogIGdlb21fZGVuc2l0eShzaXplID0gMSkgKwogIGZhY2V0X2dyaWQoZ2VudCB+IC4pICsKICBsYWJzKHRpdGxlID0gIkRlbnNpdHkgb2YgVHJhY3QtTGV2ZWwgQW1idWxhdG9yeSBDYXJlIFNlbnNpdGl2ZSBDb25kaXRpb24gRGlzY2hhcmdlcyIsCiAgICAgICBzdWJ0aXRsZSA9ICJwZXIgMTAwMCBNZWRpY2FyZSBCZW5pZmljaWFyaWVzIiwKICAgICAgIHggPSAiIiwgeSA9ICIiKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQpib3JvcyA8LSBjKCIwMDUiLCAiMDQ3IiwgIjAwNjEiLCAiMDgxIiwgIjA4NSIpCnRyYWN0cyA8LSB0aWdyaXM6OnRyYWN0cyhzdGF0ZSA9ICIzNiIsIGNvdW50eSA9IGJvcm9zLCB5ZWFyID0gMjAxMikKCmVyYXNlX3dhdGVyIDwtIGZ1bmN0aW9uKGNudHkpewogIHdhdGVyIDwtIGFyZWFfd2F0ZXIoc3RhdGUgPSAiMzYiLCBjb3VudHkgPSBjbnR5LCB5ZWFyID0gMjAxMikKICB0cmFjdHMgPDwtIHJhc3Rlcjo6ZXJhc2UodHJhY3RzLCB3YXRlcikKfQoKd2Fsayhib3JvcywgZXJhc2Vfd2F0ZXIpICMgbm90IHN1cmUgYWJvdXQgd2FybmluZ3Mgb2YgdG9vIGZldyBwb2ludHMgKGRvZXNuJ3Qgc2VlbSBsaWtlIGlzc3VlIC4uLnlldCkKCnRyYWN0c19kZiA8LQogIGZvcnRpZnkodHJhY3RzLCByZWdpb24gPSAiR0VPSUQiKSAlPiUgCiAgbGVmdF9qb2luKGRhcnRfbnljLCBieSA9IGMoImlkIiA9ICJnZW9pZCIpKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwIDwtCiAgdHJhY3RzX2RmICU+JSAKICBnZ3Bsb3QoYWVzKHg9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSBhY3NjZF9ydCkpICsKICBnZW9tX3BvbHlnb24oKSArCiAgZ2VvbV9wb2x5Z29uKGZpbGwgPSBOQSwgY29sb3IgPSAid2hpdGUiLCBzaXplID0gMC4xMCkgKwogIGNvb3JkX21hcCgpICsKICBzY2FsZV9maWxsX3ZpcmlkaXMob3B0aW9uID0gIm1hZ21hIikgKwogIHRoZW1lX25vdGhpbmcobGVnZW5kID0gVFJVRSkgKwogIGxhYnModGl0bGUgPSAiQW1idWxhdG9yeSBDYXJlIFNlbnNpdGl2ZSBDb25kaXRpb24gRGlzY2hhcmdlcyBcbnBlciAxLDAwMCBNZWRpY2FyZSBCZW5lZmljaWFyaWVzIiwKICAgICAgIHN1YnRpdGxlID0gIk5ldyBZb3JrIENpdHksIDIwMTAiLAogICAgICAgZmlsID0gIiIsCiAgICAgICBjYXB0aW9uID0gIlNvdXJjZTogRGFydG1vdXRoIEF0bGFzIG9mIEhlYWx0aCBDYXJlIikgKwogIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBsZWdlbmQucG9zaXRpb24gPSBjKC4xLCAuNyksCiAgICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGNvbG91ciA9ICJncmV5NTAiKSkKCmdnc2F2ZSgiYWNzY19tYXAucG5nIiwgcCwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gMTAsIHVuaXRzID0gImluIikKYGBgCgoqKioKCiFbXSguL2Fjc2NfbWFwLnBuZykKCioqKgoKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwIDwtCiAgdHJhY3RzX2RmICU+JSAKICBnZ3Bsb3QoYWVzKHg9IGxvbmcsIHkgPSBsYXQsIGdyb3VwID0gZ3JvdXAsIGZpbGwgPSBnZW50KSkgKwogIGdlb21fcG9seWdvbigpICsKICBnZW9tX3BvbHlnb24oZmlsbCA9IE5BLCBjb2xvciA9ICJ3aGl0ZSIsIHNpemUgPSAwLjEwKSArCiAgY29vcmRfbWFwKCkgKwogIHNjYWxlX2ZpbGxfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUpICsKICB0aGVtZV9ub3RoaW5nKGxlZ2VuZCA9IFRSVUUpICsKICBsYWJzKHRpdGxlID0gIkdlbnRyaWZpY2F0aW9uIFN0YXR1cyBieSBUcmFjdCIsCiAgICAgICBzdWJ0aXRsZSA9ICJOZXcgWW9yayBDaXR5LCAyMDEwIiwKICAgICAgIGZpbCA9ICIiLAogICAgICAgY2FwdGlvbiA9ICJTb3VyY2U6IERhcnRtb3V0aCBBdGxhcyBvZiBIZWFsdGggQ2FyZSIpICsKICB0aGVtZShsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gYyguMSwgLjcpLAogICAgICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChjb2xvdXIgPSAiZ3JleTUwIikpCgpnZ3NhdmUoImdlbnRfbWFwLnBuZyIsIHAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDEwLCB1bml0cyA9ICJpbiIpCmBgYAoKKioqCgohW10oLi9nZW50X21hcC5wbmcpCgoqKioKCgoK